#!/usr/bin/python
# -*- coding: utf-8 -*-

from array import array
import constante as cons

class Ram(object):
	def __init__(self):
		""" La taille de la Ram n'est pas exactement défini. Par défaut, ~4M sont utilisés.
		Les 80 premiers octets sont réservés par les caractères 0x1:0xF, pour l'affichage.
		Ici, la ram est représentés par un tableau de int de 8 octets, cela pour éviter tout
		depassement de mémoire.
		La ROM est chargé directement dans la mémoire à partir de l'adresse 512.
		Ensuite, on comble le reste de la Ram avec des 0.
		"""
		self.cell = array('B')
		self.cell.extend([0 for i in xrange(512)])
		self.load_character()
	
	def __getitem__(self, index):
		return self.cell[index]
	
	def __setitem__(self, index, value):
		self.cell[index] = value
	
	def inject_data(self, f):
		# Load the ROM
		length = len(f.read())
		f.seek(0)
		self.cell.fromfile(f, length)
		# Fill RAM to max
		self.cell.extend([0 for i in xrange(cons.RAM_SIZE - len(self.cell))])
	
	def load_character(self):
		""" Initialize RAM[0:79] with bits which represents the hexadecimal characters"""
		# 0
		self.cell[0]=0xF0
		self.cell[1]=0x90
		self.cell[2]=0x90
		self.cell[3]=0x90
		self.cell[4]=0xF0
		#1
		self.cell[5]=0x20
		self.cell[6]=0x60
		self.cell[7]=0x20
		self.cell[8]=0x20
		self.cell[9]=0x70
		#2
		self.cell[10]=0xF0
		self.cell[11]=0x10
		self.cell[12]=0xF0
		self.cell[13]=0x80
 		self.cell[14]=0xF0
		#3
		self.cell[15]=0xF0
		self.cell[16]=0x10
		self.cell[17]=0xF0
		self.cell[18]=0x10
		self.cell[19]=0xF0
		#4
		self.cell[20]=0x90
		self.cell[21]=0x90
		self.cell[22]=0xF0
		self.cell[23]=0x10
		self.cell[24]=0x10
		#5
		self.cell[25]=0xF0
		self.cell[26]=0x80
		self.cell[27]=0xF0
		self.cell[28]=0x10
		self.cell[29]=0xF0
		#6
		self.cell[30]=0xF0
		self.cell[31]=0x80
		self.cell[32]=0xF0
		self.cell[33]=0x90
		self.cell[34]=0xF0
		#7
		self.cell[35]=0xF0
		self.cell[36]=0x10
		self.cell[37]=0x20
		self.cell[38]=0x40
		self.cell[39]=0x40
		#8
		self.cell[40]=0xF0
		self.cell[41]=0x90
		self.cell[42]=0xF0
		self.cell[43]=0x90
		self.cell[44]=0xF0
		#9
		self.cell[45]=0xF0
		self.cell[46]=0x90
		self.cell[47]=0xF0
		self.cell[48]=0x10
		self.cell[49]=0xF0
		#10
		self.cell[50]=0xF0
		self.cell[51]=0x90
		self.cell[52]=0xF0
		self.cell[53]=0x90
		self.cell[54]=0x90
		#11
		self.cell[55]=0xE0
		self.cell[56]=0x90
		self.cell[57]=0xE0
		self.cell[58]=0x90
		self.cell[59]=0xE0
		#12
		self.cell[60]=0xF0
		self.cell[61]=0x80
		self.cell[62]=0x80
		self.cell[63]=0x80
		self.cell[64]=0xF0
		#13
		self.cell[65]=0xE0
		self.cell[66]=0x90
		self.cell[67]=0x90
		self.cell[68]=0x90
		self.cell[69]=0xE0
		#14
		self.cell[70]=0xF0
		self.cell[71]=0x80
		self.cell[72]=0xF0
		self.cell[73]=0x80
		self.cell[74]=0xF0
		#15
		self.cell[75]=0xF0
		self.cell[76]=0x80
		self.cell[77]=0xF0
		self.cell[78]=0x80
		self.cell[79]=0x80
	
	
